package com.fudan.backend.service;

import com.fudan.backend.exception.RetCode;
import com.fudan.backend.pojo.CartItem;

import java.util.List;
import java.util.Map;

public interface CartService {
    /**
     * 获取用户的购物车,通过storeid分组
     *
     * @param userId 用户id
     * @return 分组后的双层List
     */
    List<List<CartItem>> getCartItems(String userId);

    /**
     * 获取指定的购物车项信息，通过storeId分组
     *
     * @param cartItemIdList 购物车项链表
     * @return 分组后的双层List
     */
    List<List<CartItem>> getCartItemsListByCartId(List<String> cartItemIdList);

    /**
     * 获取指定的购物车项信息，通过storeId分组
     *
     * @param cartItemIdList 购物车项链表
     * @return 分组后的map
     */
    Map<String, List<CartItem>> getCartItemsMapByCartId(List<String> cartItemIdList);

    /**
     * 添加购物车项
     *
     * @param userId      用户
     * @param commodityId 商品
     * @param storeId     商品所在商店
     * @param amount      增加的数量
     * @return CART_SUCCESS 成功
     * CART_INSERT_FAILURE 失败
     */
    RetCode addCart(String userId, String commodityId, String storeId, Integer amount);

    /**
     * 删除对应购物车
     *
     * @param cartItemId 购物车项
     * @return CART_SUCCESS 成功
     * CART_DELETE_FAILURE 失败
     */
    RetCode deleteCart(String cartItemId);

    /**
     * 批量删除
     *
     * @param cartItemIdList 购物车id
     * @return CART_SUCCESS 成功
     * CART_DELETE_FAILURE 失败
     */
    RetCode deleteCartList(List<String> cartItemIdList);

    /**
     * 修改购物车项的商品数量
     *
     * @param cartItemId 购物车id
     * @param amount     更改为
     * @return CART_SUCCESS 成功
     * CART_MODIFY_FAILURE 失败
     */
    RetCode modifyCommodityNum(String cartItemId, Integer amount);

}
